<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>

    /*
    一个方法，该方法决定一个构造器对象是否认可一个对象是它的实例。由 instanceof 操作符使用
     */

    // 简单来说, 可以改写instanceof的判断

    // 1.普通的类使用instanceof判断
    function Foo() {}
    let f = new Foo();
    console.log(f instanceof Foo) // true

    // 因为instanceof操作符会使用Symbol.hasInstance函数来确定关系
    // 2.所以用下面这个和instanceof执行同样的操作
    console.log(Foo[Symbol.hasInstance](f))  // true

    // 3.学废了,然后我们来重写
    class Father{}
    class Son extends Father{
        static [Symbol.hasInstance](){
            return false;
        }
    }

    let s = new Son();
    console.log(Father[Symbol.hasInstance](s))  // true
    console.log(s instanceof Father)  // true
    console.log(Son[Symbol.hasInstance](s)) // false
    console.log(s instanceof Son)  // false

</script>
</body>
</html>